# 数学运算与模拟
a<-c(1:5)
sum(a)    #对a中的元素求和

#连乘
a<-c(1:5)
prod(a)

#求阶乘
factorial(5)

#返回最大最小值的位置
a1<-c(3,5,1,8)
which.max(a1)    #最大元素位置是4
which.min(a1)     #最大元素位置是3

#求中位数
a <- c(1,2,3,4,5)
print(median(a))

#求方差
print(var(a))

#逆序
a<-rev(a)

#排序
a<-sort(a)

#大小位置
a5<-c(11,50,23,37,44)
order(a5)   #11最小的，位置是1，23第二小，位置是3，第三小37，位置为4·····

#cumsum()函数，累计和，第n个元素是1加到n的和
print(cumsum(a))

# pmax(a,b)函数返回一个向量，第i个元素是a[i]与b[i]中的最大值
# pmin()函数返回一个向量，第i个元素是a[i]与b[i]中的最小值
a2<-c(1,2,3,4)
a3<-c(2,4,3,6)
pmax(a2,a3)  #结果第一个元素是a2[1]与a3[1]两个中的最大值，其他类推
pmin(a2,a3)

# match(x,y)函数，返回一个和x的长度相同的向量，表示x中与y中元素相同的元素在y中的位置（没有则返回NA）
a2<-c(1,2,3,4)
a3<-c(2,4,3,6)
match(a2,a3)
# [1] NA  1  3  2
#解析：a2中的第一个元素在a3中没有，返回NA，a2中的第二个元素在a3中的第1个有，返回1，以此类推

# choose(n,k)，求组合数，从n个中选出k
choose(5,3)   #5×4×3÷3÷2÷1=10 相当于c5(下) 3（上）

# unique(x),如果x是一个向量或者数据框，则返回一个类似的对象但是去掉所有重复的元素
a4<-c(1,2,4,5,6,7,7,7,7,4,4,4,2,2,2)
unique(a4)     #对重复的对象只取一次

# union(x,y)函数求x,y并集，intersect(x,y)函数求x,y交集，setdiff(x,y)函数相当于先求x,y交集在求差集

a5<-c(1,2,3,4,5,6)
a6<-c(4,5,6,7,8,9)
union(a5,a6)

intersect(a5,a6)

setdiff(a5,a6)

setdiff(a6,a5)

# x%in%y判断x,y向量元素是否相同，相同的返回TRUE，setequal(x,y)函数判断x,y向量是否完全相同，返回逻辑值
a5<-c(1,2,3,4,5,6)
a6<-c(4,2,6,4,8,9)
a5%in%a6
setequal(a5,a6)
setequal(c(1,2,3),c(1,2,3))






